/*
 * Copyright 2023 devaper
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.github.devaper.pigeon.annotation

import kotlin.reflect.*

/**
 * 定义一个属性和目标属性互为别名, 实质上是将值拷贝到目标注解中的目标属性, 这与Spring中的AliasFor功能一致,
 * 这使得可以支持组合式的注解
 *
 * 支持部分类型的自动转换, 详见 [AnnotationMetadata] 的子类
 */
@Target(AnnotationTarget.PROPERTY_GETTER)
@Retention(AnnotationRetention.RUNTIME)
annotation class AliasFor(

    /**
     * 需要拷贝到的属性名
     */
    val value: String = "",

    /**
     * 需要拷贝到的变量, 支持多个
     *
     * 如果没有提供, 那么拷贝到当前注解内的属性中
     */
    val annotation: Array<KClass<*>> = []

)
